{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "# 准备工作"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "scrolled": true,
    "slideshow": {
     "slide_type": "skip"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple\n",
      "Requirement already satisfied: scikit-learn in c:\\users\\kelen\\appdata\\roaming\\python\\python36\\site-packages (0.20.0)\n",
      "Requirement already satisfied: numpy in c:\\users\\kelen\\appdata\\roaming\\python\\python36\\site-packages (1.15.4)\n",
      "Requirement already satisfied: pandas in d:\\program files\\anaconda2\\envs\\py36\\lib\\site-packages (0.20.3)\n",
      "Requirement already satisfied: matplotlib in d:\\program files\\anaconda2\\envs\\py36\\lib\\site-packages (2.1.2)\n",
      "Requirement already satisfied: scipy>=0.13.3 in d:\\program files\\anaconda2\\envs\\py36\\lib\\site-packages (from scikit-learn) (1.1.0)\n",
      "Requirement already satisfied: python-dateutil>=2 in d:\\program files\\anaconda2\\envs\\py36\\lib\\site-packages (from pandas) (2.6.1)\n",
      "Requirement already satisfied: pytz>=2011k in d:\\program files\\anaconda2\\envs\\py36\\lib\\site-packages (from pandas) (2017.3)\n",
      "Requirement already satisfied: six>=1.10 in d:\\program files\\anaconda2\\envs\\py36\\lib\\site-packages (from matplotlib) (1.10.0)\n",
      "Requirement already satisfied: cycler>=0.10 in d:\\program files\\anaconda2\\envs\\py36\\lib\\site-packages (from matplotlib) (0.10.0)\n",
      "Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in d:\\program files\\anaconda2\\envs\\py36\\lib\\site-packages (from matplotlib) (2.2.0)\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "You are using pip version 18.0, however version 18.1 is available.\n",
      "You should consider upgrading via the 'python -m pip install --upgrade pip' command.\n"
     ]
    }
   ],
   "source": [
    "# 若要在binder中执行这个notebook，请先执行下面的指令来安装依赖包\n",
    "!pip install scikit-learn numpy pandas matplotlib"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "假设我们正要完成手写数字识别的任务。我们可以使用著名的mnist数据集来训练这样的机器学习模型。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt \n",
    "np.random.seed(1)               # reproduce the result\n",
    "import warnings\n",
    "warnings.filterwarnings(\"ignore\")\n",
    "from sklearn.datasets import load_digits"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "slideshow": {
     "slide_type": "skip"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1797, 64)\n"
     ]
    }
   ],
   "source": [
    "digits = load_digits()\n",
    "print(digits.data.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "总共有1797个数字，每个数字使用一个64维的向量表示"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1f3efa088d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\nRK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1f3ec4ab5c0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.gray() \n",
    "plt.matshow(digits.images[0]) \n",
    "plt.show() "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "slideshow": {
     "slide_type": "notes"
    }
   },
   "outputs": [],
   "source": [
    "x = digits.data\n",
    "y = digits.target"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "# 效果检验"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "-"
    }
   },
   "source": [
    "先来看看使用完全数据集训练的模型能够达到什么样的效果（这里暂不区分训练测试集）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.993322203672788"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.linear_model import LogisticRegression\n",
    "clf = LogisticRegression()\n",
    "clf.fit(x,y)\n",
    "clf.score(x,y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "然而，要想得到完全数据，我们需要标注1797个数字，这是比较吃力的。这还只是一个很小的玩具数据集，对于更大的数据集，数量级数以百万计，我们又怎能标的过来？\n",
    "\n",
    "那么，我们能不能**只标注一小部分数据**，比如说3%(50个数字左右),让它也达到不错的效果？看看效果如何。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.7918753478018921"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "clf2 = LogisticRegression()\n",
    "chosen_ids = np.random.choice(range(len(x)),50,replace=False)\n",
    "clf2.fit(x[chosen_ids],y[chosen_ids])\n",
    "clf2.score(x,y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "效果下降了很多，这还只是一个简单的任务，对于更难的任务模型的表现还会更差，那么我们就没有办法节省劳动力（偷懒）了吗？\n",
    "\n",
    "非也，我们还有**主动学习**。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "# 主动学习"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "何谓主动学习？这里我采用一种通俗的讲法：\n",
    "\n",
    "想象你面对百万大军，要想打败他们未必需要将其全部剿灭，有时只需要斩其**上将**首级即可。\n",
    "\n",
    "主动学习做的，就是帮助我们找到那个“上将”，解决重点问题，达到事半功倍的效果。看下面的图："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "![Fig1](https://img-blog.csdnimg.cn/20181213203559446.jpg) "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "左图中红绿代表两种数据。现在我们只能标注其中有限个数据来训练分类器。中间的图显示的就是随机标注的样本和得到的分界线，准确率大约为70%。而右图就是主动学习方法找到的标注点，因为这些点几乎构成了完美分界线的边界，所以使用与中图同样的样本数，它能够取得90%左右的准确率！"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "那么我们怎么找到这些关键的点呢？让我们从上例来考虑，上面找到的标注点都在中间区域，实际上都是相对比较**容易混淆的、难以确定类别的**样本。我们的目标就是找到这些样本。**分类器的预测概率**就可以帮助我们衡量这些特性，于是就有了下面的寻找策略："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- **RS策略**：随机选择，作为对照。\n",
    "- **LC策略**：寻找分类器最没有信心的预测样本，即预测的最可能类别的概率也很低的样本。\n",
    "- **BT策略**：寻找分类器最“左右为难”的预测样本，即预测的最可能的两个类别的概率很接近的样本。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "下面用代码实验和验证这些策略的效果：\n",
    "\n",
    "我们进行10批5个样本的标注，对于不同策略选出的样本，使用直接抽取已知标签的方法来模拟手动标注。来看看随着标注的进行，模型的表现如何改善，以及其最终的效果。\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "slideshow": {
     "slide_type": "notes"
    }
   },
   "outputs": [],
   "source": [
    "batch_size = 5\n",
    "rounds = 10"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [],
   "source": [
    "def RS(proba, batch_size):\n",
    "    return np.random.choice(range(proba.shape[0]),batch_size,replace=False)\n",
    "\n",
    "def LC(proba, batch_size):\n",
    "    return np.argsort(np.max(proba,axis=1))[:batch_size]\n",
    "\n",
    "def BT(proba, batch_size):\n",
    "    sorted_proba = np.sort(proba,axis=1)\n",
    "    return np.argsort(sorted_proba[:,-1]-sorted_proba[:,-2])[:batch_size]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [],
   "source": [
    "strategies = {\"RS\":RS,\"LC\":LC,\"BT\":BT}\n",
    "results = {\"RS\":[],\"LC\":[],\"BT\":[]}\n",
    "for type0 in strategies:\n",
    "    clf = LogisticRegression()\n",
    "    anno_batch = RS(x,batch_size)    # 第一批标注样本只能随机选取\n",
    "    x_train = x[anno_batch]\n",
    "    y_train = y[anno_batch]\n",
    "    for i in range(rounds-1):\n",
    "        clf.fit(x_train,y_train)\n",
    "        prec = clf.score(x,y)\n",
    "        results[type0].append(prec)\n",
    "        proba = clf.predict_proba(x)\n",
    "        stategy0 = strategies[type0]      # 后面采用不同策略\n",
    "        anno_batch = stategy0(proba,batch_size)\n",
    "        x_train = np.concatenate([x_train,x[anno_batch]])\n",
    "        y_train = np.concatenate([y_train,y[anno_batch]])\n",
    "        \n",
    "    prec = clf.score(x,y)\n",
    "    results[type0].append(prec)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1f3e627e048>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "pd.DataFrame(results).plot()\n",
    "plt.ylabel(\"Accuracy\")\n",
    "plt.xlabel(\"epoches\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "以上只是一次随机实验的结果，受每一批的具体样本影响而有一些波动。不过进行多次实验也可以看到，两种主动学习方法利用同样多的样本，却能够达到接近90%的准确率。确实比RS更胜一筹，我们可以使用这个技术来降低达到一定准确度所需的标注量。妈妈再也不用担心我手动标注数据的辛苦了！"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "# 体验手动标注"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "下面我也写了一段真正手动标注数据的代码，有兴趣的也不妨亲身尝试一下，用可以接受的时间量标注，打造出一个表现良好的模型："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "slideshow": {
     "slide_type": "skip"
    }
   },
   "outputs": [],
   "source": [
    "from IPython import display\n",
    "def human_annotate(batch_ids):\n",
    "    ret = []\n",
    "    plt.gray()\n",
    "    for id0 in batch_ids:\n",
    "        fig0 = plt.figure(figsize=(2,2)) \n",
    "        plt.matshow(digits.images[id0],fignum=0) \n",
    "        plt.show()\n",
    "        ret.append(int(input(\"请输入这个样本的标签：\")))\n",
    "        display.clear_output(wait=True)      # 动态刷新输出\n",
    "    return np.array(ret)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "slideshow": {
     "slide_type": "skip"
    }
   },
   "outputs": [],
   "source": [
    "def annotate():\n",
    "    batch_size = 5\n",
    "    rounds = 3\n",
    "    results = []\n",
    "\n",
    "    clf = LogisticRegression()\n",
    "    anno_batch = RS(x,batch_size)\n",
    "    x_train = x[anno_batch]\n",
    "    y_train = human_annotate(anno_batch)\n",
    "    for i in range(rounds-1):\n",
    "        clf.fit(x_train,y_train)\n",
    "        prec = clf.score(x,y)\n",
    "        print(f\"round {i}, prec:{prec}\")\n",
    "        results.append(prec)\n",
    "        proba = clf.predict_proba(x)\n",
    "        sorted_proba = np.sort(proba,axis=1)\n",
    "        anno_batch = BT(proba,batch_size)\n",
    "        x_train = np.concatenate([x_train,x[anno_batch]])\n",
    "        y_train = np.concatenate([y_train,human_annotate(anno_batch)])\n",
    "    clf.fit(x_train,y_train)\n",
    "    prec = clf.score(x,y)\n",
    "    print(f\"round {rounds}, prec:{prec}\")\n",
    "    results.append(prec)\n",
    "    pd.Series(results).plot()\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "round 3, prec:0.7006121313299944\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1f3f330d550>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "annotate()"
   ]
  }
 ],
 "metadata": {
  "_draft": {
   "nbviewer_url": "https://gist.github.com/58ed43a7f0830754ce89ac98c2d292f4"
  },
  "celltoolbar": "幻灯片",
  "gist": {
   "data": {
    "description": "active learning2_slide.ipynb",
    "public": true
   },
   "id": "58ed43a7f0830754ce89ac98c2d292f4"
  },
  "kernelspec": {
   "display_name": "Python [conda env:py36]",
   "language": "python",
   "name": "conda-env-py36-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.2"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {
    "height": "12px",
    "width": "160px"
   },
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
